from rest_framework.decorators import action
from rest_framework.permissions import DjangoModelPermissions
from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSet
from rest_framework import status
from apps.meiduo_admin.serializers.order import OrderInfoSerializer
from apps.meiduo_admin.utils import PageNum
from apps.orders.models import OrderInfo


class OrderModelViewSet(ModelViewSet):
    queryset = OrderInfo.objects.all()
    serializer_class = OrderInfoSerializer
    pagination_class = PageNum
    # 添加权限,以免出现错误,订单的状态随意修改,需要限制
    permission_classes = [DjangoModelPermissions]

    # 从写删除，防止使用者，删除订单数据，直接锁定，无法被删
    def destroy(self, request, *args, **kwargs):
        return Response(status=403)

    # methods=None, detail=None
    # methods=None 请求方法 ['GET','post'] 默认是get
    # detail=None  如果为True 表示在详情视图 后跟 我们的函数名 例如 /books/pk/xxx/
    #               如果为False 表示在列表视图 后跟 我们的函数名 例如 /books/xxx/

    # lookup_field = 'order_id'

    @action(methods=['put'], detail=True)
    def status(self, request, pk):
        # 查找主键的primary key, pk 是默认配置
        # pk 统称   id, xx_id, xxxx

        # 1.获取指定的订单
        order = OrderInfo.objects.get(order_id=pk)
        # get_object 就是根据 默认的pk来查询获取指定数据
        # order = self.get_object()
        # 2.获取请求参数
        status = request.data.get('status')
        # 3.判断请求参数
        # 不写这个OrderInfo.ORDER_STATUS_ENUM['UNPAID'],可以写[1,2,3,4,5]  就是 1
        # if status not in [1, 2, 3, 4, 5]:
        if status not in OrderInfo.ORDER_STATUS_ENUM.values():
            return Response(status=status.HTTP_400_BAD_REQUEST)

        # 4.更新数据
        order.status = status
        order.save()
        # 5.返回相应
        return Response({'order_id': order.order_id, 'status': order.status})
